from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json
from typing import Optional

mcp = FastMCP("Ovirt Engine DWH MCP Server")

"""
面向软件：ovirt-engine-dwh

MCP tools 列表：
1. dwh_vacuum_analyze - 执行数据库分析操作
   参数：verbose (bool) - 是否显示详细输出
   返回：统一 JSON 结构

2. dwh_vacuum_analyze_only - 仅执行分析操作
   参数：verbose (bool) - 是否显示详细输出
   返回：统一 JSON 结构

3. dwh_vacuum_full - 执行完整清理
   参数：verbose (bool) - 是否显示详细输出
   返回：统一 JSON 结构

4. dwh_vacuum_table - 清理指定表
   参数：table_name (str) - 表名，verbose (bool) - 是否显示详细输出
   返回：统一 JSON 结构

5. dwh_vacuum_verbose - 显示详细输出
   参数：无
   返回：统一 JSON 结构

6. dwh_vacuum_help - 显示帮助信息
   参数：无
   返回：统一 JSON 结构

所有工具返回的统一 JSON 结构：
{
  "success": bool,
  "command": str,
  "exit_code": int,
  "stdout": str,
  "stderr": str
}
"""

@mcp.tool()
def dwh_vacuum_analyze(verbose: bool = False) -> dict:
    """
    执行数据库分析操作
    
    参数:
        verbose: 是否显示详细输出，默认为 False
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-a"]
    if verbose:
        cmd.append("-v")
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def dwh_vacuum_analyze_only(verbose: bool = False) -> dict:
    """
    仅执行分析操作
    
    参数:
        verbose: 是否显示详细输出，默认为 False
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-A"]
    if verbose:
        cmd.append("-v")
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def dwh_vacuum_full(verbose: bool = False) -> dict:
    """
    执行完整清理
    
    参数:
        verbose: 是否显示详细输出，默认为 False
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-f"]
    if verbose:
        cmd.append("-v")
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def dwh_vacuum_table(table_name: str, verbose: bool = False) -> dict:
    """
    清理指定表
    
    参数:
        table_name: 要清理的表名
        verbose: 是否显示详细输出，默认为 False
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-t", table_name]
    if verbose:
        cmd.append("-v")
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def dwh_vacuum_verbose() -> dict:
    """
    显示详细输出
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-v"]
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def dwh_vacuum_help() -> dict:
    """
    显示帮助信息
    
    返回:
        统一 JSON 结构
    """
    cmd = ["/usr/bin/dwh-vacuum", "-h"]
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

if __name__ == "__main__":
    mcp.run()